# 作业先完成，再完美
# 什么是迭代器?什么是生成器?两者有什么区别?
# 迭代器：通过iter()方法接收可迭代对象创建迭代器对象，通过next()方法获取迭代器中下一个元素。
# 生成器：特殊的迭代器，使用了yield的函数就是生成器，生成器函数返回一个迭代器对象。
# 两者的区别：目前我对两者的感受是，生成器是一个函数，返回一个迭代器对象，函数中可以有很多操作，极大丰富了迭代器的作用。

# 协程的实现原理.
# 答：协程的实现原理与生成器是一样的，不过协程在生成器的基础上增加了send()用来传递值

# asyncio实现原理
# 答：asyncio自身维护了一个消息队列，将需要执行的异步操作put到消息队列中执行，通过循环访问消息队列实现异步

# 用协程实现一个计算平均数的函数
def ave_fun():
    total = 0
    len = 0
    while True:
        try:
            value = yield total / len
        except ZeroDivisionError:
            value = yield 0
        total += value
        len += 1

ave = ave_fun()
print(next(ave)) #预激活
print(ave.send(2))
print(ave.send(3))

# 编写一个asyncio异步程序
import asyncio

class Response:
    status_code = 200

async def requestData(i):
    print(f'{i}、开始请求数据.....')
    await asyncio.sleep(1)
    response = Response()
    print(f'{i}、获取到数据response.status_code={response.status_code}')

loop = asyncio.get_event_loop()

l = []
for i in range(10):
    l.append(requestData(i))

loop.run_until_complete(asyncio.wait(l))
loop.close()